// 用于存储购物车相关的数据
export default {
  // state: {
  //   // 用于存储购物车的商品数据
  //   cartItems: [],
  // },

  // 仓库提供状态的方式2
  state() {
    const cartStr = uni.getStorageSync('cart')

    return {
      cartItems: cartStr ? JSON.parse(cartStr) : [],
    }
  },

  // computed 计算属性, vuex中基于state派生一些状态
  getters: {
    // 商品总数
    total(state) {
      let result = 0
      state.cartItems.forEach((item) => {
        result += item.goods_count
      })

      return result
    },

    // 选中的商品总数
    checkedTotal(state) {
      let result = 0

      state.cartItems.forEach((item) => {
        if (item.goods_state) {
          // 这个商品选中了
          result += item.goods_count
        }
      })

      return result
    },

    // 选中的商品总价
    checkedAmount(state) {
      // 起始总价0
      let result = 0

      state.cartItems.forEach((item) => {
        if (item.goods_state) {
          // 这个商品勾选中 => 参与总价计算
          result += item.goods_price * item.goods_count
        }
      })

      return result.toFixed(2)
    },
  },

  mutations: {
    // 更新所有商品的选中状态
    updateAllState(state, flag) {
      state.cartItems.forEach((item) => {
        item.goods_state = flag
      })

      uni.setStorageSync('cart', JSON.stringify(state.cartItems))
    },

    addToCart(state, product) {
      // 需求: 希望将来发现有这个商品, 只让数量++; 商品第一次进入购物车, push
      const result = state.cartItems.find(
        (item) => item.goods_id === product.goods_id
      )

      if (result) {
        // 这个商品已经添加过了, 数量++
        result.goods_count++
      } else {
        // 没有添加过, push
        state.cartItems.push(product)
      }

      // state.cartItems.push(product)
      // console.log(state.cartItems, '>>>>')

      uni.setStorageSync('cart', JSON.stringify(state.cartItems))
    },

    // 用于修改对应商品的选中状态
    updateState(state, product) {
      const result = state.cartItems.find(
        (item) => item.goods_id === product.goods_id
      )
      if (result) {
        result.goods_state = !result.goods_state
        uni.setStorageSync('cart', JSON.stringify(state.cartItems))
      }
    },

    updateCount(state, { product, num }) {
      console.log(product, num)
      // 更新对应商品的数量
      const result = state.cartItems.find(
        (item) => item.goods_id === product.goods_id
      )
      if (result) {
        // 找到了对应项 更新数量
        result.goods_count = num

        uni.setStorageSync('cart', JSON.stringify(state.cartItems))
      }
    },

    removeGoods(state, product) {
      // 删除对应的商品
      state.cartItems = state.cartItems.filter(
        (item) => item.goods_id !== product.goods_id
      )
      uni.setStorageSync('cart', JSON.stringify(state.cartItems))
    },
  },

  actions: {},

  // 命名空间 => 先找模块名 再找下面其他的
  namespaced: true,
}
